/**
 * @(#)PrivilegioBean.java 
 *  
 * Esta clase presenta la informacion de una Zona
 * 
 * @version 1.0
 * @date 01/11/12 
 * @author Karen Calderón
 *  
 */
package muhnes.sizoo.controlador;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.model.SelectItem;
import muhnes.sizoo.dal.AreaprotegidaDao;
import muhnes.sizoo.dal.FabricaDAO;
import muhnes.sizoo.dal.MunicipioDao;

import muhnes.sizoo.dal.ZonaDao;
import muhnes.sizoo.modelo.Areaprotegida;
import muhnes.sizoo.modelo.Municipio;

import muhnes.sizoo.modelo.Zona;

import muhnes.sizoo.util.Transaccion;
import org.primefaces.event.FlowEvent;

/**
 * @(#)PrivilegioBean.java 
 *  
 * Esta clase presenta la informacion de una Zona
 * 
 * @version 1.0
 * @date 01/11/12 
 * @author  Karen Calderón
 *  
 */
@ManagedBean(name = "zonaBean")
@ViewScoped
public class ZonaBean extends CRUDBean< Zona, ZonaDao > 
    implements Serializable {
    
   
    private List< SelectItem > listaMunicipio;
   
    private int municipio; 
   
    private String tipopestana="";
   
    public String getTipopestana() {
        return tipopestana;
    }
    
    /** 
     * Crea una nueva instancia de ZonaBean 
     */
    public ZonaBean() {
        super( Zona.class );
        vistaProtegida = "zona";
      
       
    }

    /**
     * Selecciona un dato de tipo Entidad
     * @param zona 
     */
    @Override
    public void setEntidad(Zona zona) {
        entidad = zona;
    
    }

    /**
     * Obtiene un dato de tipo Municipio
     *  
     */
    public int getMunicipio() {
        return municipio;
    }
    
    /**
     * Selecciona un dato de tipo Municipio
     * @param municipio 
     */
    public void setMunicipio(int municipio) {
           this.municipio = municipio;
     }
    
    /**
     * Metodo que prepara la adicion de una nueva zona
     * @param event 
     */
    @Override
    public void prepararAdicion( ActionEvent event  ){
        entidad = new Zona();
     
    }
    
    /**
     * Metodo que prepara la actualizacion de una zona
     * 
     */
    @Override
    public void prepararModificacion( Zona zona ){
        entidad = zona;
    }
    
    /**
     * Metodo que prepara la eliminacion de una zona
     * 
     */
    @Override
    public void prepararEliminacion( Zona zona ){
        entidad = zona;
      
    }
    
    /**
     * Metodo que verifica que no ocurrio ningun problema de validacion
     * @param event
     *  
     */
     public String procesarFlujoAdicion( FlowEvent event ) {  
        return event.getNewStep();  
    } 

     /**
      * Metodo que habilita las zonas
      * @param event 
      */
     public void habilitarZona( ActionEvent event ){
        ZonaDao zonaDao = FabricaDAO.crearZonaDao();
        zonaDao.actualizar( entidad );
        recrearModelo();
    }

     /**
      * Metodo que devuelve una lista de municipios
      * @return objeto list
      */
      public List< SelectItem > getListaMunicipio() {
        if( listaMunicipio == null ) {
            listaMunicipio = new ArrayList< SelectItem >();
            MunicipioDao municipioDao = FabricaDAO.crearMunicipioDao();
            for( Municipio municipio : municipioDao.buscarTodos() ) {
                Municipio m = municipioDao.removerProxy(municipio);
                SelectItem item = new SelectItem( m, m.getDepartamento().getNombre() + ", " + m.getNombre() );
                listaMunicipio.add( item );
            }
        }
        return listaMunicipio;
    }
    
      /**
       * Instancia una nueva ZonaDao
       * @return 
       */
    @Override
    protected ZonaDao getDAO () {
        return FabricaDAO.crearZonaDao();
    }

    /**
     * 
     * @param transaccion indica que transaccion se debera realizar 
     * @return objeto de tipo boolean que indica que tipo de transaccion se realizara
     */
    @Override
    protected boolean debeValidar (Transaccion transaccion) {
        boolean validacion = false;
        
        switch( transaccion ) {
            case INSERCION:
            case ACTUALIZACION:
            case ELIMINACION:
                validacion = true;
        }
        
        return validacion;
    }
    
}


